

//
//  YXHomeViewController.swift
//  微博YX
//
//  Created by apple on 15/11/23.
//  Copyright © 2015年 lyx. All rights reserved.
//

import UIKit

import AFNetworking

import SVProgressHUD

//用来分别cell的重用标示，微博的类型
enum YXStatusReuseIdentifier: String{
    
   case NormalCell = "NormalCell"//原始值
    case retweetedCell = "retweetedCell"
}

class YXHomeViewController: YXBaseTableViewController {
    /// cell重用标示
    private let ReuseIdentifier = "ReuseIdentifier"
    
    // 有一个存储微博数据的模型
    var statuses: [YXStatus]? {
        didSet {
            tableView .reloadData()
        }
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if !userLogin{
            return
        }
        
     //设置导航栏
     setupNav()
     // 加载微博数据
      YXStatus.loadStatus { (result, error) -> () in
        if error != nil{
            print("加载微博数据失败")
            SVProgressHUD.showErrorWithStatus("网络不给力")
            return
        }
        print("加载数据成功 result:\(result)")
        
        //赋值给属性
        self.statuses = result
     }
        prepareTableView()
    }
    
    /// 注册cell
    private func prepareTableView() {
        tableView.registerClass(YXStatusNormalCell.self, forCellReuseIdentifier: YXStatusReuseIdentifier.NormalCell.rawValue)
        tableView.registerClass(YXStatusRetweetedCell.self, forCellReuseIdentifier: YXStatusReuseIdentifier.retweetedCell.rawValue)
        

        
//        取消分割线
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        // 设置预估行高,减少cell的计算次数,加载cell内容的显示.缺点:没有显示的cell,在即将显示的时候,还是需要计算一次cell,有可能影响,拖动的流畅
        tableView.estimatedRowHeight = 200

    }
    
    // MARK: - 设置导航栏
    private func setupNav() {
        // 设置导航栏左边
        navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch")
        // 设置导航栏右边
        navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop")

        
        // 设置标题
        // 创建按钮
        // ??: 如果 ?? 前面有值,就使用前面的值, ?? 前面没有值,就使用 ?? 后面的值
        let screen_name = YXUserAccount.loadUserAccount()?.screen_name ?? "围脖圈"
        
        let homeTitleButton = YXHomeTitleButton(title: screen_name)
        navigationItem.titleView = homeTitleButton
        homeTitleButton.addTarget(self, action: "homeTitleButtonClick:", forControlEvents: UIControlEvents.TouchUpInside)
        
        
    }
    func homeTitleButtonClick(button: UIButton){
        //       点击修改按钮的选中状态
        button.selected = !button.selected

       if button.selected {
        UIView.animateWithDuration(0.25, animations: { () -> Void in
            button.imageView?.transform = CGAffineTransformMakeRotation(CGFloat(M_PI - 0.01))
        })
        
        } else {
        UIView.animateWithDuration(0.25, animations: { () -> Void in
            button.imageView?.transform = CGAffineTransformIdentity
        })
      }
    }
    
    
//    计算行高
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat  {
//        获得模型
       let statu = statuses![indexPath.row]
//        判断模型里面有没有缓存的行高
        if statu.rowHeiht != nil {
             print("缓存的行高：\(statu.rowHeiht)")
            return statu.rowHeiht!
           
        }
        // 获取cell, 计算行高,并不会显示出来
        let cell = tableView.dequeueReusableCellWithIdentifier(statu.cellId()) as! YXStatusCell
        let rowHeight = cell.rowHight(statu)
        statu.rowHeiht = rowHeight
        
        print("计算行高,indexPath: \(indexPath), rowHeight: \(rowHeight)")
        return rowHeight
        }
    
    // 返回多行数据
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return   statuses?.count ?? 0
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
//        获得模型，模型里面有cellId属性知道要显示转发微博还是原创微博
        let statu = statuses![indexPath.row]
//        根据模型的cell类型显示相应的微博类型
        let cell = tableView.dequeueReusableCellWithIdentifier(statu.cellId()) as! YXStatusCell
        
        cell.status = statu
        
        return cell
    }
   
    
   
}
